0 CpxTRS
↳1 TrsToWeightedTrsProof (BOTH BOUNDS(ID, ID), 0 ms)
↳2 CpxWeightedTrs
↳3 TypeInferenceProof (BOTH BOUNDS(ID, ID), 0 ms)
↳4 CpxTypedWeightedTrs
↳5 CompletionProof (UPPER BOUND(ID), 0 ms)
↳6 CpxTypedWeightedCompleteTrs
↳7 NarrowingProof (BOTH BOUNDS(ID, ID), 0 ms)
↳8 CpxTypedWeightedCompleteTrs
↳9 CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID), 0 ms)
↳10 CpxRNTS
↳11 SimplificationProof (BOTH BOUNDS(ID, ID), 0 ms)
↳12 CpxRNTS
↳13 CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID), 0 ms)
↳14 CpxRNTS
↳15 IntTrsBoundProof (UPPER BOUND(ID), 250 ms)
↳16 CpxRNTS
↳17 IntTrsBoundProof (UPPER BOUND(ID), 93 ms)
↳18 CpxRNTS
↳19 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳20 CpxRNTS
↳21 IntTrsBoundProof (UPPER BOUND(ID), 271 ms)
↳22 CpxRNTS
↳23 IntTrsBoundProof (UPPER BOUND(ID), 68 ms)
↳24 CpxRNTS
↳25 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳26 CpxRNTS
↳27 IntTrsBoundProof (UPPER BOUND(ID), 349 ms)
↳28 CpxRNTS
↳29 IntTrsBoundProof (UPPER BOUND(ID), 58 ms)
↳30 CpxRNTS
↳31 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳32 CpxRNTS
↳33 IntTrsBoundProof (UPPER BOUND(ID), 252 ms)
↳34 CpxRNTS
↳35 IntTrsBoundProof (UPPER BOUND(ID), 191 ms)
↳36 CpxRNTS
↳37 FinalProof (⇔, 0 ms)
↳38 BOUNDS(1, EXP)
f(X) → cons(X, n__f(g(X)))
g(0) → s(0)
g(s(X)) → s(s(g(X)))
sel(0, cons(X, Y)) → X
sel(s(X), cons(Y, Z)) → sel(X, activate(Z))
f(X) → n__f(X)
activate(n__f(X)) → f(X)
activate(X) → X
f(X) → cons(X, n__f(g(X))) [1]
g(0) → s(0) [1]
g(s(X)) → s(s(g(X))) [1]
sel(0, cons(X, Y)) → X [1]
sel(s(X), cons(Y, Z)) → sel(X, activate(Z)) [1]
f(X) → n__f(X) [1]
activate(n__f(X)) → f(X) [1]
activate(X) → X [1]
f(X) → cons(X, n__f(g(X))) [1]
g(0) → s(0) [1]
g(s(X)) → s(s(g(X))) [1]
sel(0, cons(X, Y)) → X [1]
sel(s(X), cons(Y, Z)) → sel(X, activate(Z)) [1]
f(X) → n__f(X) [1]
activate(n__f(X)) → f(X) [1]
activate(X) → X [1]
f :: 0:s → n__f:cons cons :: 0:s → n__f:cons → n__f:cons n__f :: 0:s → n__f:cons g :: 0:s → 0:s 0 :: 0:s s :: 0:s → 0:s sel :: 0:s → n__f:cons → 0:s activate :: n__f:cons → n__f:cons |
(a) The obligation is a constructor system where every type has a constant constructor,
(b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols:
sel
activate
f
g
const
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
0 => 0
const => 0
activate(z) -{ 1 }→ X :|: X >= 0, z = X
activate(z) -{ 1 }→ f(X) :|: z = 1 + X, X >= 0
f(z) -{ 1 }→ 1 + X :|: X >= 0, z = X
f(z) -{ 1 }→ 1 + X + (1 + g(X)) :|: X >= 0, z = X
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 }→ 1 + (1 + g(X)) :|: z = 1 + X, X >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(X, Z) :|: Z >= 0, z = 1 + X, Y >= 0, X >= 0, z' = 1 + Y + Z
sel(z, z') -{ 2 }→ sel(X, f(X')) :|: z = 1 + X, Y >= 0, z' = 1 + Y + (1 + X'), X >= 0, X' >= 0
activate(z) -{ 1 }→ z :|: z >= 0
activate(z) -{ 1 }→ f(z - 1) :|: z - 1 >= 0
f(z) -{ 1 }→ 1 + z :|: z >= 0
f(z) -{ 1 }→ 1 + z + (1 + g(z)) :|: z >= 0
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 }→ 1 + (1 + g(z - 1)) :|: z - 1 >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(z - 1, Z) :|: Z >= 0, Y >= 0, z - 1 >= 0, z' = 1 + Y + Z
sel(z, z') -{ 2 }→ sel(z - 1, f(X')) :|: Y >= 0, z' = 1 + Y + (1 + X'), z - 1 >= 0, X' >= 0
{ g } { f } { activate } { sel } |
activate(z) -{ 1 }→ z :|: z >= 0
activate(z) -{ 1 }→ f(z - 1) :|: z - 1 >= 0
f(z) -{ 1 }→ 1 + z :|: z >= 0
f(z) -{ 1 }→ 1 + z + (1 + g(z)) :|: z >= 0
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 }→ 1 + (1 + g(z - 1)) :|: z - 1 >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(z - 1, Z) :|: Z >= 0, Y >= 0, z - 1 >= 0, z' = 1 + Y + Z
sel(z, z') -{ 2 }→ sel(z - 1, f(X')) :|: Y >= 0, z' = 1 + Y + (1 + X'), z - 1 >= 0, X' >= 0
activate(z) -{ 1 }→ z :|: z >= 0
activate(z) -{ 1 }→ f(z - 1) :|: z - 1 >= 0
f(z) -{ 1 }→ 1 + z :|: z >= 0
f(z) -{ 1 }→ 1 + z + (1 + g(z)) :|: z >= 0
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 }→ 1 + (1 + g(z - 1)) :|: z - 1 >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(z - 1, Z) :|: Z >= 0, Y >= 0, z - 1 >= 0, z' = 1 + Y + Z
sel(z, z') -{ 2 }→ sel(z - 1, f(X')) :|: Y >= 0, z' = 1 + Y + (1 + X'), z - 1 >= 0, X' >= 0
g: runtime: ?, size: O(n1) [1 + 2·z] |
activate(z) -{ 1 }→ z :|: z >= 0
activate(z) -{ 1 }→ f(z - 1) :|: z - 1 >= 0
f(z) -{ 1 }→ 1 + z :|: z >= 0
f(z) -{ 1 }→ 1 + z + (1 + g(z)) :|: z >= 0
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 }→ 1 + (1 + g(z - 1)) :|: z - 1 >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(z - 1, Z) :|: Z >= 0, Y >= 0, z - 1 >= 0, z' = 1 + Y + Z
sel(z, z') -{ 2 }→ sel(z - 1, f(X')) :|: Y >= 0, z' = 1 + Y + (1 + X'), z - 1 >= 0, X' >= 0
g: runtime: O(n1) [1 + z], size: O(n1) [1 + 2·z] |
activate(z) -{ 1 }→ z :|: z >= 0
activate(z) -{ 1 }→ f(z - 1) :|: z - 1 >= 0
f(z) -{ 1 }→ 1 + z :|: z >= 0
f(z) -{ 2 + z }→ 1 + z + (1 + s) :|: s >= 0, s <= 2 * z + 1, z >= 0
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 + z }→ 1 + (1 + s') :|: s' >= 0, s' <= 2 * (z - 1) + 1, z - 1 >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(z - 1, Z) :|: Z >= 0, Y >= 0, z - 1 >= 0, z' = 1 + Y + Z
sel(z, z') -{ 2 }→ sel(z - 1, f(X')) :|: Y >= 0, z' = 1 + Y + (1 + X'), z - 1 >= 0, X' >= 0
g: runtime: O(n1) [1 + z], size: O(n1) [1 + 2·z] |
activate(z) -{ 1 }→ z :|: z >= 0
activate(z) -{ 1 }→ f(z - 1) :|: z - 1 >= 0
f(z) -{ 1 }→ 1 + z :|: z >= 0
f(z) -{ 2 + z }→ 1 + z + (1 + s) :|: s >= 0, s <= 2 * z + 1, z >= 0
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 + z }→ 1 + (1 + s') :|: s' >= 0, s' <= 2 * (z - 1) + 1, z - 1 >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(z - 1, Z) :|: Z >= 0, Y >= 0, z - 1 >= 0, z' = 1 + Y + Z
sel(z, z') -{ 2 }→ sel(z - 1, f(X')) :|: Y >= 0, z' = 1 + Y + (1 + X'), z - 1 >= 0, X' >= 0
g: runtime: O(n1) [1 + z], size: O(n1) [1 + 2·z] f: runtime: ?, size: O(n1) [3 + 3·z] |
activate(z) -{ 1 }→ z :|: z >= 0
activate(z) -{ 1 }→ f(z - 1) :|: z - 1 >= 0
f(z) -{ 1 }→ 1 + z :|: z >= 0
f(z) -{ 2 + z }→ 1 + z + (1 + s) :|: s >= 0, s <= 2 * z + 1, z >= 0
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 + z }→ 1 + (1 + s') :|: s' >= 0, s' <= 2 * (z - 1) + 1, z - 1 >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(z - 1, Z) :|: Z >= 0, Y >= 0, z - 1 >= 0, z' = 1 + Y + Z
sel(z, z') -{ 2 }→ sel(z - 1, f(X')) :|: Y >= 0, z' = 1 + Y + (1 + X'), z - 1 >= 0, X' >= 0
g: runtime: O(n1) [1 + z], size: O(n1) [1 + 2·z] f: runtime: O(n1) [2 + z], size: O(n1) [3 + 3·z] |
activate(z) -{ 2 + z }→ s1 :|: s1 >= 0, s1 <= 3 * (z - 1) + 3, z - 1 >= 0
activate(z) -{ 1 }→ z :|: z >= 0
f(z) -{ 1 }→ 1 + z :|: z >= 0
f(z) -{ 2 + z }→ 1 + z + (1 + s) :|: s >= 0, s <= 2 * z + 1, z >= 0
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 + z }→ 1 + (1 + s') :|: s' >= 0, s' <= 2 * (z - 1) + 1, z - 1 >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(z - 1, Z) :|: Z >= 0, Y >= 0, z - 1 >= 0, z' = 1 + Y + Z
sel(z, z') -{ 4 + X' }→ sel(z - 1, s'') :|: s'' >= 0, s'' <= 3 * X' + 3, Y >= 0, z' = 1 + Y + (1 + X'), z - 1 >= 0, X' >= 0
g: runtime: O(n1) [1 + z], size: O(n1) [1 + 2·z] f: runtime: O(n1) [2 + z], size: O(n1) [3 + 3·z] |
activate(z) -{ 2 + z }→ s1 :|: s1 >= 0, s1 <= 3 * (z - 1) + 3, z - 1 >= 0
activate(z) -{ 1 }→ z :|: z >= 0
f(z) -{ 1 }→ 1 + z :|: z >= 0
f(z) -{ 2 + z }→ 1 + z + (1 + s) :|: s >= 0, s <= 2 * z + 1, z >= 0
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 + z }→ 1 + (1 + s') :|: s' >= 0, s' <= 2 * (z - 1) + 1, z - 1 >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(z - 1, Z) :|: Z >= 0, Y >= 0, z - 1 >= 0, z' = 1 + Y + Z
sel(z, z') -{ 4 + X' }→ sel(z - 1, s'') :|: s'' >= 0, s'' <= 3 * X' + 3, Y >= 0, z' = 1 + Y + (1 + X'), z - 1 >= 0, X' >= 0
g: runtime: O(n1) [1 + z], size: O(n1) [1 + 2·z] f: runtime: O(n1) [2 + z], size: O(n1) [3 + 3·z] activate: runtime: ?, size: O(n1) [3·z] |
activate(z) -{ 2 + z }→ s1 :|: s1 >= 0, s1 <= 3 * (z - 1) + 3, z - 1 >= 0
activate(z) -{ 1 }→ z :|: z >= 0
f(z) -{ 1 }→ 1 + z :|: z >= 0
f(z) -{ 2 + z }→ 1 + z + (1 + s) :|: s >= 0, s <= 2 * z + 1, z >= 0
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 + z }→ 1 + (1 + s') :|: s' >= 0, s' <= 2 * (z - 1) + 1, z - 1 >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(z - 1, Z) :|: Z >= 0, Y >= 0, z - 1 >= 0, z' = 1 + Y + Z
sel(z, z') -{ 4 + X' }→ sel(z - 1, s'') :|: s'' >= 0, s'' <= 3 * X' + 3, Y >= 0, z' = 1 + Y + (1 + X'), z - 1 >= 0, X' >= 0
g: runtime: O(n1) [1 + z], size: O(n1) [1 + 2·z] f: runtime: O(n1) [2 + z], size: O(n1) [3 + 3·z] activate: runtime: O(n1) [2 + z], size: O(n1) [3·z] |
activate(z) -{ 2 + z }→ s1 :|: s1 >= 0, s1 <= 3 * (z - 1) + 3, z - 1 >= 0
activate(z) -{ 1 }→ z :|: z >= 0
f(z) -{ 1 }→ 1 + z :|: z >= 0
f(z) -{ 2 + z }→ 1 + z + (1 + s) :|: s >= 0, s <= 2 * z + 1, z >= 0
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 + z }→ 1 + (1 + s') :|: s' >= 0, s' <= 2 * (z - 1) + 1, z - 1 >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(z - 1, Z) :|: Z >= 0, Y >= 0, z - 1 >= 0, z' = 1 + Y + Z
sel(z, z') -{ 4 + X' }→ sel(z - 1, s'') :|: s'' >= 0, s'' <= 3 * X' + 3, Y >= 0, z' = 1 + Y + (1 + X'), z - 1 >= 0, X' >= 0
g: runtime: O(n1) [1 + z], size: O(n1) [1 + 2·z] f: runtime: O(n1) [2 + z], size: O(n1) [3 + 3·z] activate: runtime: O(n1) [2 + z], size: O(n1) [3·z] |
activate(z) -{ 2 + z }→ s1 :|: s1 >= 0, s1 <= 3 * (z - 1) + 3, z - 1 >= 0
activate(z) -{ 1 }→ z :|: z >= 0
f(z) -{ 1 }→ 1 + z :|: z >= 0
f(z) -{ 2 + z }→ 1 + z + (1 + s) :|: s >= 0, s <= 2 * z + 1, z >= 0
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 + z }→ 1 + (1 + s') :|: s' >= 0, s' <= 2 * (z - 1) + 1, z - 1 >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(z - 1, Z) :|: Z >= 0, Y >= 0, z - 1 >= 0, z' = 1 + Y + Z
sel(z, z') -{ 4 + X' }→ sel(z - 1, s'') :|: s'' >= 0, s'' <= 3 * X' + 3, Y >= 0, z' = 1 + Y + (1 + X'), z - 1 >= 0, X' >= 0
g: runtime: O(n1) [1 + z], size: O(n1) [1 + 2·z] f: runtime: O(n1) [2 + z], size: O(n1) [3 + 3·z] activate: runtime: O(n1) [2 + z], size: O(n1) [3·z] sel: runtime: ?, size: EXP |
activate(z) -{ 2 + z }→ s1 :|: s1 >= 0, s1 <= 3 * (z - 1) + 3, z - 1 >= 0
activate(z) -{ 1 }→ z :|: z >= 0
f(z) -{ 1 }→ 1 + z :|: z >= 0
f(z) -{ 2 + z }→ 1 + z + (1 + s) :|: s >= 0, s <= 2 * z + 1, z >= 0
g(z) -{ 1 }→ 1 + 0 :|: z = 0
g(z) -{ 1 + z }→ 1 + (1 + s') :|: s' >= 0, s' <= 2 * (z - 1) + 1, z - 1 >= 0
sel(z, z') -{ 1 }→ X :|: Y >= 0, X >= 0, z' = 1 + X + Y, z = 0
sel(z, z') -{ 2 }→ sel(z - 1, Z) :|: Z >= 0, Y >= 0, z - 1 >= 0, z' = 1 + Y + Z
sel(z, z') -{ 4 + X' }→ sel(z - 1, s'') :|: s'' >= 0, s'' <= 3 * X' + 3, Y >= 0, z' = 1 + Y + (1 + X'), z - 1 >= 0, X' >= 0
g: runtime: O(n1) [1 + z], size: O(n1) [1 + 2·z] f: runtime: O(n1) [2 + z], size: O(n1) [3 + 3·z] activate: runtime: O(n1) [2 + z], size: O(n1) [3·z] sel: runtime: EXP, size: EXP |